package com.booksquare.data;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.booksquare.data.JDBCUtil;

public class UsuarioDao {

	public Usuario obtenerUsuarioLogin(String sUsuario, String sPassword){
		Connection connection = null;
		Statement st = null;
		ResultSet rs = null;
		Usuario oUsuario = new Usuario();
		
		try{
			connection = JDBCUtil.getConnection();
			st = connection.createStatement();
			
			final String sQuery = "Select usuario, pwd, nombre, puntaje from usuario " +
					" where usuario='" + sUsuario.trim() + "' and pwd='" + sPassword.trim() + "' ";
			rs = st.executeQuery(sQuery);
			
			if (rs.next()){
				oUsuario = new Usuario(rs.getString("usuario"), rs.getString("pwd"), rs.getString("nombre"), rs.getInt("puntaje"));
			}
		}
		catch(SQLException ex){
			throw new IllegalStateException("Error al obtener el login del usuario.", ex);
		}
		finally{
			JDBCUtil.closeResultSet(rs);
			JDBCUtil.closeStatement(st);
			JDBCUtil.closeConnection(connection);
		}
		return oUsuario;
	}
	
	public List<Usuario> obtenerUsuarios(){
		Connection connection = null;
		Statement st = null;
		ResultSet rs = null;
		List<Usuario> oListaUsuarios = new ArrayList<Usuario>();
		
		try{
			connection = JDBCUtil.getConnection();
			st = connection.createStatement();
			
			final String sQuery = "Select usuario, pwd, nombre, puntaje from usuario ";
			rs = st.executeQuery(sQuery);
			
			if (rs.next()){
				oListaUsuarios.add(new Usuario(rs.getString("usuario"), rs.getString("pwd"), rs.getString("nombre"), rs.getInt("puntaje")));
			}
		}
		catch(SQLException ex){
			throw new IllegalStateException("Error al obtener los usuarios.", ex);
		}
		finally{
			JDBCUtil.closeResultSet(rs);
			JDBCUtil.closeStatement(st);
			JDBCUtil.closeConnection(connection);
		}
		return oListaUsuarios;
	}
	
	public List<Usuario> obtenerListaAmigos(String sUsuario){
		Connection connection = null;
		Statement st = null;
		ResultSet rs = null;
		List<Usuario> oListaAmigos = new ArrayList<Usuario>();
		
		try{
			connection = JDBCUtil.getConnection();
			st = connection.createStatement();
			
			final String sQuery = "Select a.usuario_amigo, u1.pwd, u1.nombre, u1.puntaje "
					+ " from amistad a  "
					+ " Inner Join Usuario u on a.Usuario = u.Usuario "
					+ " Inner Join Usuario u1 on a.Usuario_amigo = u1.Usuario "
					+ " Where u.Usuario = '" + sUsuario.trim() + "' ";
			
			rs = st.executeQuery(sQuery);
			
			while (rs.next()){
				oListaAmigos.add(new Usuario(rs.getString("usuario_amigo"), rs.getString("pwd"), rs.getString("nombre"), rs.getInt("puntaje")));
			}
		}
		catch(SQLException ex){
			throw new IllegalStateException("Error al obtener la lista de amigos del usuario.", ex);
		}
		finally{
			JDBCUtil.closeResultSet(rs);
			JDBCUtil.closeStatement(st);
			JDBCUtil.closeConnection(connection);
		}
		return oListaAmigos;
	}
}
